From: Jonas Dreßler Date: Tue, 9 Mar 2021 16:37:22 +0000 (+0100) Subject: overviewControls: Hide the appDisplay when it's not shown X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~120 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c239cd398d45cd4364cbd57e973c982cd99dfdc5;p=gnome-shell.git overviewControls: Hide the appDisplay when it's not shown Hiding actors allows excluding them from layout, so by hidding the appDisplay in all the cases where the overviewAdjustment is not actually showing it, we can save a lot of time on the first frame of painting the overview because we no longer have to layout the whole appGrid. Part-of: --- diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index 72542b381..2a0dd3c66 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -179,23 +179,26 @@ class ControlsManagerLayout extends Clutter.BoxLayout { this._workspacesDisplay.allocate(workspacesBox); // AppDisplay - const workspaceAppGridBox = - this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID); - - params = [box, searchHeight, dashHeight, workspaceAppGridBox]; - let appDisplayBox; - if (!transitionParams.transitioning) { - appDisplayBox = - this._getAppDisplayBoxForState(transitionParams.currentState, ...params); - } else { - const initialBox = - this._getAppDisplayBoxForState(transitionParams.initialState, ...params); - const finalBox = - this._getAppDisplayBoxForState(transitionParams.finalState, ...params); + if (this._appDisplay.visible) { + const workspaceAppGridBox = + this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID); + + params = [box, searchHeight, dashHeight, workspaceAppGridBox]; + let appDisplayBox; + if (!transitionParams.transitioning) { + appDisplayBox = + this._getAppDisplayBoxForState(transitionParams.currentState, ...params); + } else { + const initialBox = + this._getAppDisplayBoxForState(transitionParams.initialState, ...params); + const finalBox = + this._getAppDisplayBoxForState(transitionParams.finalState, ...params); + + appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress); + } - appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress); + this._appDisplay.allocate(appDisplayBox); } - this._appDisplay.allocate(appDisplayBox); // Search childBox.set_origin(0, searchHeight + spacing); @@ -500,6 +503,12 @@ class ControlsManager extends St.Widget { this._thumbnailsBox.ease(params); } + _updateAppDisplayVisibility() { + this._appDisplay.visible = + this._stateAdjustment.value > ControlsState.WINDOW_PICKER && + !this._searchController.searchActive; + } + _update() { const params = this._stateAdjustment.getStateTransitionParams(); @@ -512,13 +521,14 @@ class ControlsManager extends St.Widget { fitModeAdjustment.value = fitMode; this._updateThumbnailsBox(); + this._updateAppDisplayVisibility(); } _onSearchChanged() { const { searchActive } = this._searchController; if (!searchActive) { - this._appDisplay.show(); + this._updateAppDisplayVisibility(); this._workspacesDisplay.reactive = true; this._workspacesDisplay.setPrimaryWorkspaceVisible(true); } else { @@ -531,7 +541,7 @@ class ControlsManager extends St.Widget { opacity: searchActive ? 0 : 255, duration: SIDE_CONTROLS_ANIMATION_TIME, mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this._appDisplay.visible = !searchActive), + onComplete: () => this._updateAppDisplayVisibility(), }); this._workspacesDisplay.ease({ opacity: searchActive ? 0 : 255,